/**
 * axios 重新发起请求
 * 
 * @param {*} retryDelay 重试间隔时间(秒)
 * @param {*} retryTimes 最多重试次数
 * 
 */

/**
 * 重发请求主方法
 * @param {*} config 请求参数信息
 * @param {*} axios axios 对象
 * @param {*} error 请求错误信息
 * @returns 
 */
function anewInitiate(config, server, error) {
  if (!config || !config.retryTimes) return Promise.reject(error);

  const { __retryCount = 0, retryDelay = 3000, retryTimes } = config;
  // 在请求对象上设置重试次数
  config.__retryCount = __retryCount;
  // 判断是否超过了重试次数
  if (__retryCount >= retryTimes) {
    return Promise.reject(error)
  }
  // 增加重试次数
  config.__retryCount++;
  // 延时处理
  const delay = new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, retryDelay);
  });
  // 重新发起请求
  return delay.then(function () {
    config.cancelToken = null
    return server(config);
  });
}

// todo 模块化使用时可用 export 输出
// export {
//   anewInitiate
// }